package com.rachel.testjetpack.livedata;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

/**
 * MutableLiveData是一种可变的LiveData
 * 我们把mCount这个可变的LiveData暴露给了外部，导致我们在ViewModel外也是可以赋值的，这样违反了ViewModel数据的封装性
 * 比较推荐的做法是，永远只暴露不可变的LiveData给外部。这样在非ViewModel中就只能观察liveData的数据变化，而不能给LiveData设置数据。
 * <p>
 * 所以我们需要将这个可变类型的变量声明为私有的并且声明一个不可变的变量赋值给mCount,只对外暴露不可变的LiveData。
 */
public class Main4ActivityViewModel extends ViewModel {


    private MutableLiveData<Integer> mCount = new MutableLiveData<>();


    /**
     * @return 返回不可变数据类型
     */
    public LiveData<Integer> getCount() {
        return mCount;
    }

    /**
     * @return 返回不可变数据类型
     */
    public void setCount(int count) {
        mCount.postValue(count);
    }


    public void add() {
        mCount.postValue(mCount.getValue() + 1);
    }

    public Main4ActivityViewModel(int count) {
        this.mCount.setValue(count);
    }
}